package QianFeng06.I18NDemo;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;

/**
 * 程序国际化
 * 1、Locale对象表示特定的地理、政治和文化地区。
 * 构造方法来创建Locale：
 * Locale(String language)
 * Locale(String language,String country)
 * 静态方法创建Locale：
 * getDefault()
 *
 * 2、ResourceBundle类
 * ResourceBundle类表示的是一个资源文件的读取操作，所有的资源文件需要使用
 * ResourceBundle进行读取，读取的时候不需要加上文件的后缀。
 * getBundle(String baseName)
 * getBundle(String baseName,Locale locale)
 * getString(String key)
 *
 * 国际化的实现核心在于显示的语言上，通常的做法是将其定义成若干个属性文件(文件后缀是*.properties) ,
 * 属性文件中的格式采用“key=value” 的格式进行操作。
 * Properties文件：属性文件（配置文件），内容以键值对的形式存放（key-value）
 * ResourceBundle工具类，来绑定属性文件，并指定Locale对象，来自动选择使用哪个属性文件，默认将使用操作系统相同的语言
 *
 * 处理动态文本：
 * 前面的示例读取的内容都是固定的，如果现在假设要想打印这样的信息“欢迎你，xxx! ”,
 * 具体的名字不是固定的，那么就要使用动态文本进行程序的处理。
 * 进行动态的文本处理，必须使用java.text.MessageFormat类完成。这个类是jav.text.Format的子类。
 **/
public class I18NDemo {
    public static void main(String[] args) {
        //创建一个本地语言环境对象，该对象会根据参数设置来自动选择与之相关的语言环境
        //参数：语言，地区
        Locale locale_CN = new Locale("zh", "CN");
        Locale locale_US = new Locale("en", "US");
        //获取当前系统默认的语言环境
        Locale locale_default = Locale.getDefault();

        Scanner input = new Scanner(System.in);
        //用于绑定属性文件的工具类（参数：属性文件的基本名（就是前缀，比如：info））
        ResourceBundle resourceBundle = ResourceBundle.getBundle("QianFeng06.I18NDemo.info", locale_US);
        System.out.println(resourceBundle.getString("system.name"));
        System.out.println(resourceBundle.getString("input.username"));
        String username = input.nextLine();
        System.out.println(resourceBundle.getString("input.password"));
        String password = input.nextLine();
        if ("admin".equals(username) && "123".equals(password)) {
            System.out.println(resourceBundle.getString("login.success"));
            String welcome = resourceBundle.getString("welcome");
            welcome = MessageFormat.format(welcome, username);
            System.out.println(welcome);
        } else {
            System.out.println(resourceBundle.getString("login.login.error"));
        }
    }
}
